using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._TerritoryDesignTools._Analysis
{
    /// <summary>
    /// <para>Add Level Variables</para>
    /// <para>Adds a new field at the specified level.</para>
    /// <para>在指定级别添加新字段。</para>
    /// </summary>    
    [DisplayName("Add Level Variables")]
    public class AddLevelVariables : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public AddLevelVariables()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_territory_solution">
        /// <para>Input Territory Solution</para>
        /// <para>The input territory solution.</para>
        /// <para>输入区域解决方案。</para>
        /// </param>
        /// <param name="_level">
        /// <para>Level</para>
        /// <para>The level to which the calculated field will be added.</para>
        /// <para>将计算字段添加到的级别。</para>
        /// </param>
        /// <param name="_base_level">
        /// <para>Base Level</para>
        /// <para>The level below the territory level from which the attribute value will be added.</para>
        /// <para>将从中添加属性值的区域级别以下的级别。</para>
        /// </param>
        /// <param name="_variables">
        /// <para>Variables</para>
        /// <para><xdoc>
        ///   <para>The variables that will be added to the level.</para>
        ///   <para>Statistic Field—Field for the statistical calculation.</para>
        ///   <para>Statistic—Type of statistical calculation.
        ///   <bulletList>
        ///     <bullet_item>Count—Employs count in the derivation of the statistical calculation.  </bullet_item><para/>
        ///     <bullet_item>Sum—Employs summation in the derivation of the statistical calculation.  </bullet_item><para/>
        ///     <bullet_item>Maximum—Employs the maximum value in the derivation of the statistical calculation.  </bullet_item><para/>
        ///     <bullet_item>Minimum—Employs the minimum value in the derivation of the statistical calculation.  </bullet_item><para/>
        ///     <bullet_item>Average—Employs average in the derivation of the statistical calculation.  </bullet_item><para/>
        ///     <bullet_item>Median—Employs the use of median techniques in the derivation of the statistical calculation.  </bullet_item><para/>
        ///     <bullet_item>Standard Deviation—Employs standard deviation in the derivation of the statistical calculation.  </bullet_item><para/>
        ///     <bullet_item>Percent of Total—Employs percentage techniques in the derivation of the statistical calculation.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>Field Name—Valid name of the field on the level where calculated data will be stored.</para>
        ///   <para>Field Alias Name—Readable and understandable name of the calculated field.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将添加到关卡的变量。</para>
        ///   <para>统计字段 （Statistic Field） - 统计计算字段。</para>
        /// <para>统计 - 统计计算的类型。
        ///   <bulletList>
        ///     <bullet_item>计数 （Count） - 在统计计算的派生中使用计数。</bullet_item><para/>
        ///     <bullet_item>总和 （Sum） - 在统计计算的派生中使用求和。</bullet_item><para/>
        ///     <bullet_item>最大值 （Maximum） - 在统计计算的派生中使用最大值。</bullet_item><para/>
        ///     <bullet_item>最小值 （Minimum） - 在统计计算的派生中使用最小值。</bullet_item><para/>
        ///     <bullet_item>平均值 （Average） - 在统计计算的推导中使用平均值。</bullet_item><para/>
        ///     <bullet_item>中位数 - 在统计计算的推导中使用中位数技术。</bullet_item><para/>
        ///     <bullet_item>标准差 （Standard Deviation） - 在推导统计计算时采用标准差。</bullet_item><para/>
        ///     <bullet_item>占总数的百分比 （Percent of Total） - 在推导统计计算时采用百分比技术。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>字段名称 - 将存储计算数据的级别上的字段的有效名称。</para>
        ///   <para>字段别名 - 计算字段的可读且易于理解的名称。</para>
        /// </xdoc></para>
        /// </param>
        public AddLevelVariables(object _in_territory_solution, object _level, object _base_level, object _variables)
        {
            this._in_territory_solution = _in_territory_solution;
            this._level = _level;
            this._base_level = _base_level;
            this._variables = _variables;
        }
        public override string ToolboxName => "Territory Design Tools";

        public override string ToolName => "Add Level Variables";

        public override string CallName => "td.AddLevelVariables";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_territory_solution, _level, _base_level, _variables, _out_territory_solution];

        /// <summary>
        /// <para>Input Territory Solution</para>
        /// <para>The input territory solution.</para>
        /// <para>输入区域解决方案。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Territory Solution")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_territory_solution { get; set; }


        /// <summary>
        /// <para>Level</para>
        /// <para>The level to which the calculated field will be added.</para>
        /// <para>将计算字段添加到的级别。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Level")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _level { get; set; }


        /// <summary>
        /// <para>Base Level</para>
        /// <para>The level below the territory level from which the attribute value will be added.</para>
        /// <para>将从中添加属性值的区域级别以下的级别。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Base Level")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _base_level { get; set; }


        /// <summary>
        /// <para>Variables</para>
        /// <para><xdoc>
        ///   <para>The variables that will be added to the level.</para>
        ///   <para>Statistic Field—Field for the statistical calculation.</para>
        ///   <para>Statistic—Type of statistical calculation.
        ///   <bulletList>
        ///     <bullet_item>Count—Employs count in the derivation of the statistical calculation.  </bullet_item><para/>
        ///     <bullet_item>Sum—Employs summation in the derivation of the statistical calculation.  </bullet_item><para/>
        ///     <bullet_item>Maximum—Employs the maximum value in the derivation of the statistical calculation.  </bullet_item><para/>
        ///     <bullet_item>Minimum—Employs the minimum value in the derivation of the statistical calculation.  </bullet_item><para/>
        ///     <bullet_item>Average—Employs average in the derivation of the statistical calculation.  </bullet_item><para/>
        ///     <bullet_item>Median—Employs the use of median techniques in the derivation of the statistical calculation.  </bullet_item><para/>
        ///     <bullet_item>Standard Deviation—Employs standard deviation in the derivation of the statistical calculation.  </bullet_item><para/>
        ///     <bullet_item>Percent of Total—Employs percentage techniques in the derivation of the statistical calculation.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>Field Name—Valid name of the field on the level where calculated data will be stored.</para>
        ///   <para>Field Alias Name—Readable and understandable name of the calculated field.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将添加到关卡的变量。</para>
        ///   <para>统计字段 （Statistic Field） - 统计计算字段。</para>
        /// <para>统计 - 统计计算的类型。
        ///   <bulletList>
        ///     <bullet_item>计数 （Count） - 在统计计算的派生中使用计数。</bullet_item><para/>
        ///     <bullet_item>总和 （Sum） - 在统计计算的派生中使用求和。</bullet_item><para/>
        ///     <bullet_item>最大值 （Maximum） - 在统计计算的派生中使用最大值。</bullet_item><para/>
        ///     <bullet_item>最小值 （Minimum） - 在统计计算的派生中使用最小值。</bullet_item><para/>
        ///     <bullet_item>平均值 （Average） - 在统计计算的推导中使用平均值。</bullet_item><para/>
        ///     <bullet_item>中位数 - 在统计计算的推导中使用中位数技术。</bullet_item><para/>
        ///     <bullet_item>标准差 （Standard Deviation） - 在推导统计计算时采用标准差。</bullet_item><para/>
        ///     <bullet_item>占总数的百分比 （Percent of Total） - 在推导统计计算时采用百分比技术。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>字段名称 - 将存储计算数据的级别上的字段的有效名称。</para>
        ///   <para>字段别名 - 计算字段的可读且易于理解的名称。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Variables")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _variables { get; set; }


        /// <summary>
        /// <para>Updated Territory Solution</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Territory Solution")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_territory_solution { get; set; }


        public AddLevelVariables SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}